from abc import ABC

import scrapy


class BookSpider(scrapy.Spider, ABC):
    # 爬虫唯一标识
    name = "books"

    start_urls = ['http://books.toscrape.com/']

    def parse(self, response):
        # 提取数据
        # 每一本书的信息在<article class="product_pod">中，我们使用
        # # css()方法找到所有这样的article 元素，并依次迭代
        for book in response.css('article.product_pod'):
            name = book.xpath('./h3/a/@title').extract_first()
            # 书价信息在 <p class="price_color">的TEXT中。
            price = book.css('p.price_color::text').extract_first()
            yield {
                'name': name,
                'price': price,
            }

            # 提取链接
            # 下一页的url 在ul.pager > li.next > a 里面
            # 例如: <li class="next"><a href="catalogue/page-2.html">next</a></li>
        next_url = response.css('ul.pager li.next a::attr(href)').extract_first()
        print("获取到nextUrl:" + next_url)
        if next_url:
            # 如果找到下一页的URL，得到绝对路径，构造新的Request 对象
            next_url = response.urljoin(next_url)
            yield scrapy.Request(next_url, callback=self.parse)
